const Router = require('koa-router')
const { TokenValidator,NotEmptyValidator } = require("../validators/validator")
const { LoginType } = require('../lib/enum')//类型
const { User } = require('../models/user')
const { generateToken } = require('../cors/util')
const { WXManager } = require('../services/wx') 
const {Auth}=require("../middlewares/auth") //获取级别
const router = new Router({
    prefix: '/v1/token'
})

router.post('/', async (ctx) => {
    const v = await new TokenValidator().validate(ctx)
    let token
    // 登录方式：email || 小程序
    // API 权限 公开API 
    // token 过期 不合法
    //业务逻辑
    //1 API接口编写
    //2 Model 分层
    //业务分层 中小型业务 Model  Service

    switch (v.get('body.type')) {
        // email登录
        case LoginType.USER_EMAIL:
            token = await emailLogin(v.get('body.account'), v.get('body.secret'))
            break;

        // 小程序登录
        case LoginType.USER_MINI_PROGRAM:
            token = await WXManager.codeToToken(v.get('body.account'))
            break;

        // 管理员登录
        case LoginType.ADMIN_EMAIL:
            break;

        default:
            throw new global.errs.ParameterException('没有相应的处理函数')
    }

    ctx.body = {
       token:token,
 
    }

})
// 验证token
router.post('/verify', async (ctx) => {
    const v = await new NotEmptyValidator().validate(ctx)
    console.log(ctx.body)
    const result = Auth.verifyToken(v.get('body.token'))

    ctx.body = {
        isValid: result
    }
})

async function emailLogin(account, secret) {
    console.log(secret, 000)
    const user = await User.verifyEmailPassword(account, secret) 

    // 发布令牌
    // return generateToken(user.id, Auth.AUSE)
    // 发布令牌
    return generateToken(user.id, Auth.USER)
}

module.exports = router